<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>λ演算</title>
</head>
<body>
<p>几十年前，一位美国数学家阿隆佐·邱奇（Alonzo Church，1903/6/14－1995/8/11），提出了一套名为λ演算(Lambda
  calculus)的计算机运算逻辑。最简单的部分，不使用加减乘除以及数字，来进行四则运算。对的，如果让你算1+1，你可以伸出两个指头，让你算9x9，你要说你背得乘法口诀表，但这些方法计算机并不理解，所以需要有一个方法可以让计算机实现以上的运算，于是λ演算就解决了这个问题，也因此今天我们得以在计算器上执行各种复杂得运算，你以为显而易见的1+1等于2，其实背后有一套严密的运算逻辑（不要跟我讲哥德巴赫猜想，拒绝）
</p>

<script type="text/javascript">
  'use strict';

  // 定义数字0:
  var zero = function (f) {
    return function (x) {
      return x;
    }
  };

  // 定义数字1:
  var one = function (f) {
    return function (x) {
      return f(x);
    }
  };

  // 定义加法:
  function add(n, m) {
    return function (f) {
      return function (x) {
        return m(f)(n(f)(x));
      }
    }
  }

  // 计算数字2 = 1 + 1:
  var two = add(one, one);

  // 计算数字3 = 1 + 2:
  var three = add(one, two);

  // 计算数字5 = 2 + 3:
  var five = add(two, three);

  // 你说它是3就是3，你说它是5就是5，你怎么证明？

  // 给3传一个函数，会打印3次:
  (three(() => console.log('print 3 times')))();

  // 给5传一个函数，会打印5次:
  (five(() => console.log('print 5 times')))();
</script>
</body>
</html>
